package com.itheima.d3_recursion;

//目标：了解递归思想和三要素
public class Demo2 {
    public static void main(String[] args) {
        /**
         * 递归三要素：
         *      递归公式
         *      递归终点
         *      递归的方向必须走向终点
         *
         * 需求：计算1~n的阶乘的结果，使用递归思想解决
         */
        //1.总结的公式：f(n) = f(n-1) * n;
        //意味着：一个大问题，可以不断的拆解成结构相似或者相同的小问题！

        //2.定义一个方法叫f，这个方法可以获取n阶乘的结果

        //3.调用方法，求5的阶乘结果
        int result = f(5);
        System.out.println(result);

    }

    /**
     * 方法：求制定整数阶乘的结果
     * 明确参数：指定的整数
     * 明确返回值：阶乘结果
     */
    public static int f(int n) {
        //3.公式已经推理完毕：f(n) = f(n-1) * n;
        //其中不会无限拆解，当拆解到求1的阶乘时，结果是一个确定的数字1
        if (n == 1) {
            return 1;
        }

        //4.当n不等于1的时候，利用公式。返回 f(n)，相当于返回 f(n-1) * n
        return f(n - 1) * n;
    }
}
